//
//  MainTabBarController.swift
//  zyqWeibo
//
//  Created by 张亚琼 on 15/6/23.
//  Copyright © 2015年 张亚琼. All rights reserved.
//

import UIKit

class MainTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 定义一个自定义tabBar，设置为当前tabBar
        let tb = MainTabBar()
        setValue(tb, forKey: "tabBar")
        // 获取到自定义tabBar，则也可以获取到它里面的按钮,然后给按钮添加点击事件
        // 最好由控制器来监听点击事件
        tb.addButton.addTarget(self, action: "addButtonClicked", forControlEvents: UIControlEvents.TouchUpInside)
        
        
        addChildViewControllers()
    }
    
    func addButtonClicked() {
        let vc = ComposeViewController()
        let nav = UINavigationController(rootViewController: vc)
        presentViewController(nav, animated: true, completion: nil)
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
//        print(tabBar.items)
    }
    
    /// 添加所有子控制器，分别调用添加子控制器方法
    private func addChildViewControllers()
    {

        
        // 1.加载JSON
        let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
        let data = NSData(contentsOfFile: path!)
        
        // 2.进行反序列化
        do {
            let array = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)
            // 对数组中元素进行遍历(数组的类型是[[String: String]]，表示数组中都是字典数据)
            for dict in array as! [[String: String]] {
                addChildViewController(dict["vcName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
            }
        }catch {
            print(error)
            // 如果json出错，则直接用字符串加载
            addChildViewController("HomeTableViewController", title: "首页", imageName: "tabbar_home")
            addChildViewController("MessageTableViewController", title: "消息", imageName: "tabbar_message_center")
            addChildViewController("DiscoverTableViewController", title: "发现", imageName: "tabbar_discover")
            addChildViewController("ProfileTableViewController", title: "我", imageName: "tabbar_profile")
        }
    }

    // 把传入viewController改为传入字符串
    /// 重载方法，用于添加某一个子控制器。并且设置为私有，不允许外界访问
    private func addChildViewController(vcName:String,title:String,imageName:String) {
        
        // 获取命名空间的字符串
        let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
        // 把字符串转换成类
        let cls: AnyClass = NSClassFromString(ns + "." + vcName)!
        // 实例化
        let vc  = cls.new() as! UIViewController
        
        
        // 设置tabBar的颜色
        tabBar.tintColor = UIColor.orangeColor()
        // 设置title，这样设置tabBar和navBar都会显示
        vc.title = title
        // 设置tabBar的图片
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        // 定义一个导航控制器，它的根控制器是传入的vc
        let nav = UINavigationController(rootViewController: vc)
        // 使用系统自带的方法，将设置好的nav控制器添加到TabBar控制器中
        addChildViewController(nav)
    }
    

    
}
